package controller;

import entity.UtenteRegistrato;
import java.util.List;
import javax.ejb.Local;

/**
 * Operazioni generiche sugli utenti
 * @author ale
 */
@Local
public interface ControllerUtentiLocal {

    /**
     * Restituisce il numero totale di utenti presenti nel sistema
     * @return il numero totale di utenti presenti nel sistema
     */
    int getNumeroUtenti();

    /**
     * Restituisce il numero di indirizzi e-mail in totale presenti nel sistema
     * @return il numero di indirizzi e-mail in totale presenti nel sistema
     */
    public int getNumeroMail();

    /**
     * Restituisce il numero di indirizzi di abitazione in totale presenti nel sistema
     * @return il numero di indirizzi di abitazione in totale presenti nel sistema
     */
    public int getNumeroAbitazioni();

    /**
     * Recupera un utente a partire dall'id specificato
     * @param id l'id dell'utente cercato
     * @return l'utente corrispondente, se esiste; null altrimenti
     */
    UtenteRegistrato getUtenteById(long id);

    /**
     * Crea un indirizzo e lo inserisce nal database
     * @param indirizzo descrizione dell'indirizzo (es. "Via Mazzini 12, Rapallo")
     * @return l'indirizzo creato
     */
    public entity.IndirizzoAbitazione creaIndirizzo(java.lang.String indirizzo);

    /**
     * Verifica se esiste un utente con la mail specificata
     * @param mail la mail cercata
     * @return true sse esiste un utente con la mail specificata
     */
    public boolean isRegistrato(String mail);

    /**
     * Recupera un utente basandosi sull'indirizzo e-mail con cui si è registrato
     * @param mail l'indirizzo e-mail dell'utente cercato
     * @return l'utente, se esiste; null altrimenti
     */
    public UtenteRegistrato getUserByMail(String mail);

    /**
     * Restituisce la lista di tutti gli utenti presenti nel sistema
     * @return la lista di tutti gli utenti presenti nel sistema
     */
    public List<UtenteRegistrato> getAllUtenti();
    
}
